[C++]模板类的友元重载

来源:百度知道 编辑:UC知道 时间:2024/05/22 08:19:24
下面的代码在Visual C++6.0中编译报错
#include <iostream>
using namespace std;

template <class T>
class Test;
template <class T>
ostream& operator < <(ostream& out,const Test <T> & obj);

template <class T>
class Test
{
private:
int num;
public:
Test(int n=0){num=n;}
Test(const Test <T> & copy){num=copy.num;}
friend ostream& operator < <(ostream& out,const Test <T> & obj);
};
template <class T>
ostream& operator < <(ostream& out,const Test <T> & obj)
{
out < <obj.num;
return out;
}

int main()
{
Test <int> t(2);
cout < <t < <endl;

return 0;
}

:\C++work\caogao\关于友元函数\sadfasd.cpp(22) : error
C2248: 'num' : c

楼主写的基本都是正确的,就是写friend的时候少写了点,更正如程序中!

我用的是VS7.1,VS6.0没有试过!

#include <iostream>
using namespace std;

template <class T>
class Test;

template <class T>
ostream& operator<<(ostream& out,const Test<T> &obj);

template <class T>
class Test
{
private:
int num;
public:
Test(int n=0){num=n;}
Test(const Test <T> & copy){num=copy.num;}
friend ostream& operator<< <>(ostream& out,const Test<T> &obj); //注意 在<< 后加上 <>表明这是个函数模板
};

template <class T>
ostream& operator<<(ostream& out,const Test<T> &obj)
{
out<<obj.num;
return out;
}

int main()
{
Test<int> t(2);
cout<<t;

return 0;
}

#include <iostream>
using namespace std;